独習PHP:第9章 データベース連携
独習PHP:第9章 データベース連携
9.4.2 例外処理
そもそも、例外とは
アプリ実行時に発生する異常な状態、エラーのこと
DBに接続したいけどできなかった、読み込みを求められなかった、割る数が0だったなど
例外はコード次第で未然に防げるが、開発者側の問題で防げないこともある
アクセス権限を持たないなど
あらかじめ発生するかもしれないエラーを想定し、発生した場合の処理が例外処理
code:php
try {
// 例外の発生する可能性があるコード
} catch(発生するかもしれない例外の種類 $例外を受け取る変数名) {
// 例外処理コード
} finally {
// 例外の有無に関わらず表示されるコード
}
通常tryで括らずいると、エラー発生時にコードは停止する
括っておけば、catchブロックに処理が引き継がれる
finallyは例外の有無に関わらず実行される
ファイルを開く処理があるなら、finallyブロックに閉じる旨の命令を書いておくなど
🌟処理の途中でエラーを吐いたら例外にさせる、ってわけではないのかも
起こりうるエラーを考えて、それをthrowで送るイメージ
code:php
$x = 100;
$y = 0;
try {
if ($y == 0) {
throw new Exception('例外メッセージ', 999); //message, エラーコードを定義できる
}
} catch (Exception $e) {
echo '例外を検出しました' . PHP_EOL;
echo $e->getMessage(); // throw文で書かれた「例外メッセージ」というメッセージ
echo $e->getFile() . PHP_EOL;
echo $e->getCode() . PHP_EOL; // 999
🌟エラーをキャッチすることもできるが複雑
code:php
// エラーをキャッチする
set_error_handler(function($err_no, $err_str, $err_file, $err_line) {
if (!(error_reporting() & $err_no)) {
return;
}
throw new ErrorException($err_str, $err_no, 0, $err_file, $err_line);
});
try {
// 存在しない変数をecho
echo $wawa;
} catch (Exception $e) {
echo "例外が発生しました。" . $e->getMessage();
}
tryで処理実行→エラーが起こるので、エラーをハンドリングする関数へ移動
→関数内でthrowする→catch文で例外処理として処理する、という流れ
「例外」と「エラー」は違うので、意識しよう
構文ミスなどで発生するのがエラーで、意図的にthrowしたものが例外というような定義
9.8 トランザクション処理
ここもやっときてぇ〜